package pe.edu.upc.dew.Grupo1.web;

import java.io.IOException;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.support.WebApplicationContextUtils;

import pe.edu.upc.dew.Grupo1.model.Cine;
import pe.edu.upc.dew.Grupo1.model.Tarifa;
import pe.edu.upc.dew.Grupo1.model.Usuario;
import pe.edu.upc.dew.Grupo1.model.Venta;

import pe.edu.upc.dew.Grupo1.model.Funcion;

import pe.edu.upc.dew.Grupo1.model.Local;

import pe.edu.upc.dew.Grupo1.model.Pelicula;

import pe.edu.upc.dew.Grupo1.model.Sala;

import pe.edu.upc.dew.Grupo1.service.CineService;
import pe.edu.upc.dew.Grupo1.service.TarifaService;
import pe.edu.upc.dew.Grupo1.service.VentaService;

import pe.edu.upc.dew.Grupo1.service.FuncionService;

import pe.edu.upc.dew.Grupo1.service.LocalService;

import pe.edu.upc.dew.Grupo1.service.PeliculaService;

import pe.edu.upc.dew.Grupo1.service.SalaService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class MantFuncionServlet
 */
public class VentaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private TarifaService tarifaService;
	private FuncionService funcionService;
	private PeliculaService peliculaService;
	private SalaService salaService;
	private VentaService ventaService;
	
	public VentaServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public void init(ServletConfig config) throws ServletException {

		this.tarifaService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"tarifaService", TarifaService.class);

		this.funcionService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"funcionService", FuncionService.class);

		this.peliculaService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"peliculaService", PeliculaService.class);
		
		this.ventaService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"ventaService", VentaService.class);	
		
		this.salaService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"salaService", SalaService.class);		

	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)

	throws ServletException, IOException {
		
		HttpSession session=req.getSession();
		if(session.getAttribute("usuario") == null)
		{
			req.getRequestDispatcher("login.jsp").forward(req,resp);	
			return;
		}

		String paramNroTicket = req.getParameter("nroTicket");

		Tarifa tarifa = new Tarifa();
		tarifa.setTipoCliente("A");
		
		Usuario usuario=(Usuario) session.getAttribute("usuario");
				
		tarifa.setLocal(usuario.getLocal());

		List<Tarifa> lista = tarifaService.GetTarifasPorTipoCliente(tarifa);
		req.setAttribute("tarifas", lista);

		Pelicula pelicula = new Pelicula();
		pelicula.setNombre("");		
		
		List<Pelicula> lista2 = peliculaService.GetPeliculasPorRazonSocial(pelicula);
		req.setAttribute("peliculas", lista2);	
		
		Funcion funcion = new Funcion();
		funcion.setEstado(true);		
		
		List<Funcion> lista3 = funcionService.GetFuncionesPorEstado(funcion);
		req.setAttribute("funciones", lista3);
		
		int codigo = 0;

		codigo = ventaService.GetConteoVentas() + 1;
		
		Venta ventaParam = new Venta();
		ventaParam.setNroTicket(codigo);
		req.setAttribute("venta", ventaParam);
		
		if (paramNroTicket != null && !paramNroTicket.equals(""))
		{

			int nroTicket = Integer.parseInt(paramNroTicket);			

			ventaParam.setNroTicket(nroTicket);

			Venta venta = ventaService.GetventaPorCodigo(nroTicket);
			
			
			req.setAttribute("venta", venta);

		}

		req.getRequestDispatcher("regi_tic.jsp").forward(req, resp);

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)

	throws ServletException, IOException {
		
		HttpSession session=req.getSession();
		if(session.getAttribute("usuario") == null)
		{
			req.getRequestDispatcher("login.jsp").forward(req,resp);	
			return;
		}

		try {
			
			int codigoFuncion = Integer.parseInt(req.getParameter("funcion"));

			//getting date
			final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
			
			Calendar cal = Calendar.getInstance();
			SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);

			String fecha = sdf.format(cal.getTime());
			
			int cantidad = Integer.parseInt(req.getParameter("cantidad"));		

			double tarifa = Double.parseDouble(req.getParameter("tarifa"));	
			
			double total = cantidad * tarifa;
			
			Funcion funcion = new Funcion();

			funcion.setCodigoFuncion(codigoFuncion);

			Funcion funcionGet = new Funcion();
			funcionGet = funcionService.GetFuncionPorCodigo(funcion);
			
			Sala sala = new Sala();
			sala = salaService.GetSalaPorCodigo(funcionGet.getSala().getCodigoSala());
			
			funcionGet.setSala(sala);
			
			Venta venta = new Venta();

			venta.setFechaVenta(fecha);
			
			venta.setTotal(total);
			
			venta.setCantidad(cantidad);
			
			venta.setFuncion(funcionGet);

			int codigo = 0;

				codigo = ventaService.GetConteoVentas() + 1;

				venta.setNroTicket(codigo);

				ventaService.RegistrarVenta(venta);

			req.getRequestDispatcher("ListasCartelera").forward(req, resp);

		} catch (Exception e) {

			System.out.println(e.getMessage());

			req.getRequestDispatcher("error.jsp").forward(req, resp);

		}

	}


}
